新增注释是Servlet 3.0中的重大革新之一。通过使用注释就无需在web.xml文件中对Servlet或者过滤器进行配置。
新增的注释支持:Servlet 3.0的部署描述文件web.xml的顶层标签
有一个 metadata-complete 属性,该属性指定当前的部署描述文件是否是完全的。
如果设置为 true,则容器在部署时将只依赖部署描述文件,忽略所有的注解
如果不配置该属性,或者将其设置为 false,则表示启用注解支持
Servlet 3.0新增的注释有@WebServlet
、@WebFilter
、@WebListener
和@WebInitParam
等。
@WebServlet
@WebServlet注释定义在Servlet的类声明之前,用于定义Servlet组件。使用该注释,就无需在web.xml文件中对Servlet进行配置。@WebServlet主要属性如下表所示:
属性名 | 类型 | 描述 |
---|---|---|
name | String | 指定 Servlet 的 name 属性,等价于 |
value | String[] | 该属性等价于 urlPatterns 属性。两个属性不能同时使用 |
urlPatterns | String[] | 指定一组 Servlet 的 URL 匹配模式。等价于 |
loadOnStartup | int | 指定 Servlet 的加载顺序,等价于 |
initParams | WebInitParam[] | 指定一组 Servlet 初始化参数,等价于 |
asyncSupported | boolean | 声明 Servlet 是否支持异步操作模式,等价于 |
description | String | 该 Servlet 的描述信息,等价于 |
displayName | String | 该 Servlet 的显示名,通常配合工具使用,等价于 |
注意:以上所有属性均为可选属性,但
value
和urlPatterns
其中一个必存在,若两个同时存在,一般忽略value
取值。
例:
SimpleServlet.java1
2
3
4"/simple"}, asyncSupported = true, (urlPatterns = {
loadOnStartup = -1, name = "SimpleServlet", displayName = "ss",
initParams = {"username", value = "tom")}) (name =
public class SimpleServlet extends HttpServlet{ … }
其等价于以下的web.xml文件配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<servlet>
<display-name>ss</display-name>
<servlet-name>SimpleServlet</servlet-name>
<servlet-class>footmark.servlet.SimpleServlet</servlet-class>
<load-on-startup>-1</load-on-startup>
<async-supported>true</async-supported>
<init-param>
<param-name>username</param-name>
<param-value>tom</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SimpleServlet</servlet-name>
<url-pattern>/simple</url-pattern>
</servlet-mapping>
@WebFilter
@WebFilter注释器用于声明过滤器,该注释将会在部署时被容器处理,容器根据具体的属性配置将相应的类部署为过滤器。
@WebFilter主要属性如下表所示:
属性名 | 类型 | 描述 |
---|---|---|
filterName | String | 指定过滤器的 name 属性,等价于 |
value | String[] | 该属性等价于 urlPatterns 属性。但是两者不应该同时使用 |
urlPatterns | String[] | 指定一组过滤器的 URL 匹配模式。等价于 |
servletNames | String[] | 指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,或者是 web.xml 中 |
dispatcherTypes | DispatcherType | 指定过滤器的转发模式。具体取值包括:ASYNC、ERROR 、FORWARD、INCLUDE、REQUEST |
initParams | WebInitParam[] | 指定一组过滤器初始化参数,等价于 |
asyncSupported | boolean | 声明过滤器是否支持异步操作模式,等价于 |
description | String | 该过滤器的描述信息,等价于 |
displayName | String | 该过滤器的显示名,通常配合工具使用,等价于 |
注意:以上所有属性均为可选属性,但
value
、urlPatterns
和servletNames
三者必须至少包含一个,若value
和urlPatterns
两个同时存在,一般忽略value
取值。
例:
LessThanSixFilter.java1
2"SimpleServlet"},filterName="SimpleFilter") (servletNames = {
public class LessThanSixFilter implements Filter{...}
其等价于以下的web.xml文件配置1
2
3
4
5
6
7
8<filter>
<filter-name>SimpleFilter</filter-name>
<filter-class>LessThanSixFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SimpleFilter</filter-name>
<servlet-name>SimpleServlet</servlet-name>
</filter-mapping>
@WebListener
@WebListener注释器用于声明监听器,还可以用于充当给定Web应用上下文中各种Web应用事件的监听器的类。被@WebListener标注的类必须实现以下至少一个接口:
- ServletContextListener
- ServletContextAttributeListener
- ServletRequestListener
- ServletRequestAttributeListener
- HttpSessionListener
- HttpSessionAttributeListener
@WebListener的常用属性
属性名 | 类型 | 是否可选 | 描述 |
---|---|---|---|
value | String | 是 | 该监听器的描述信息 |
例:
SimpleListener.java1
2"This is only a demo listener") (
public class SimpleListener implements ServletContextListener{...}
其等价于以下的web.xml文件配置1
2
3<listener>
<listener-class>footmark.servlet.SimpleListener</listener-class>
</listener>
@WebInitParam
@WebInitParam注释等价于web.xml文件中的
@WebInitParam主要属性如下表所示:
属性名 | 类型 | 是否可选 | 描述 |
---|---|---|---|
name | String | 否 | 指定参数的名字,等价于 |
value | String | 否 | 指定参数的值,等价于 |
description | String | 是 | 关于参数的描述,等价于 |